"""
复写父类成员和子类调用父类成员


复写：
子类继承父类的成员属性和成员方法后，如果对其“不满意”，那么可以进行复写。
即：在子类中重新定义同名的属性或方法即可。

调用父类同名成员
一旦复写父类成员，那么类对象调用成员的时候，就会调用复写后的新成员
如果需要使用被复写的父类的成员，需要特殊的调用方式：

方式1：
-调用父类成员
使用成员变量：父类名.成员变量
使用成员方法：父类名.成员方法（self）

方式2：
- 使用super())调用父类成员
使用成员变量：super().成员变量
使用成员方法：super().成员方法()


注意：只可以在子类内部调用父类的同名成员，子类的实体类对象调用默认是调用子类复写的成员
"""

print("========================== 复写父类成员")


class Phone:
    IMEI = None
    producer = "小米"

    def call_by_5g(self):
        print("使用5g网络进行通话")


# 定义子类，复写父类成员
class MyPhone(Phone):
    producer = "华为"  # 复写父类的成员属性

    def call_by_5g(self):
        print("开启CPU单核模式，确保通话的时候省电")
        print("使用5g网络进行通话")
        print("关闭CPU单核模式，确保性能")


my = MyPhone()
my.call_by_5g()
print("当前厂商：", my.producer)

print("========================== 调用父类同名成员")


class Phone2024:
    IMEI = None
    producer = "小米"

    def call_by_5g(self):
        print("使用5g网络进行通话")


# 定义子类，复写父类成员
class MyPhone2024(Phone):
    producer = "华为"  # 复写父类的成员属性

    def call_by_5g(self):
        print("开启CPU单核模式，确保通话的时候省电")
        # print("使用5g网络进行通话")
        # 方式一
        # Phone2024.call_by_5g(self)  # 调用父类的成员方法
        # print("父类的厂商是：", Phone2024.producer)
        #方式二
        super().call_by_5g()
        print("父类的厂商是：", super().producer)
        print("关闭CPU单核模式，确保性能")


my = MyPhone2024()
my.call_by_5g()
